import store from '@/store'
import axios from 'axios'
import QS from 'qs'
import nProgress from 'nprogress'
import 'nprogress/nprogress.css'

//axios.create方法执行,其实返回一个axios和request一样的
let requests = axios.create({
    //基础路径,发请求URL携带api【发现:真实服务器接口都携带/api】
    baseURL: "/api",
    //超时的设置
    timeout: 10000,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
});



// 请求拦截器， 在发送请求之前就会被检测到这里
requests.interceptors.request.use((config) => {
    nProgress.start()
    if (store.state.detail.uuid_token) {
        config.headers.userTempId = store.state.detail.uuid_token
    }
    let token = localStorage.getItem('token') || ''
    if (token) {
        config.headers.token = token
    }

    return config
}, error => {
    return Promise.reject(error)
})

// 相应拦截器
requests.interceptors.response.use((response) => {
    nProgress.done()
    if (response.status === 200) {
        return Promise.resolve(response)
    } else {
        return Promise.reject(response)
    }
}, (error) => {
    // 响应失败的回调函数, 服务器状态码不是200的情况
    nProgress.done()
    if (error.response.status) {
        switch (error.response.status) {
            case 401:
                // 未登录
                break;
            case 403:
                // 登录过期
                break;
            case 404:
                // 请求不存在
                break;
            default:
                // 其它网络错误
                break;
        }
    }
    return Promise.reject(error.response)
})

export function get(url, params) {
    return new Promise((resolve, reject) => {
        requests.get(url, {
            params
        })
            .then(res => {
                resolve(res.data)
            })
            .catch(error => {
                reject(error.data)
            })
    })
}

export function post(url, params) {
    console.log(QS.stringify(params))
    return new Promise((resolve, reject) => {
        requests.post(url, QS.stringify(params))
            .then(res => {
                resolve(res.data)
            })
            .catch(error => {
                reject(error.data)
            })
    })
}